using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

using Tao.OpenGl;

namespace tp3
{
    public class Riel
    {

        public static void Dibujar(List<Punto> puntos)
        {
            Gl.glEnable(Gl.GL_LIGHTING);
            
            float[] materialColor = ColorTP.FColor(Color.Goldenrod);
            float[] materialSpecular = { 1.0f, 1.0f, 1.0f, 1.0f };
            float[] materialEmission = { 0.05f, 0.05f, 0.05f, 1.0f };

            Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_AMBIENT_AND_DIFFUSE, materialColor);
            Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_SPECULAR, materialSpecular);
            Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_EMISSION, materialEmission);
            Gl.glMaterialf(Gl.GL_FRONT_AND_BACK, Gl.GL_SHININESS, 25);

            Circulo.Radio = 0.05;

            List<List<Punto>> puntosCirculoAnterior = new List<List<Punto>>();
            List<List<Punto>> puntosCirculoNuevo = new List<List<Punto>>();

            int j = 1;
            while (puntosCirculoNuevo.Count == 0)
            {
                puntosCirculoNuevo = Circulo.CalcularPuntos(new Punto(puntos[puntos.Count - j].X,
                    puntos[puntos.Count - j].Y,
                    puntos[puntos.Count - j].Z),
                    new Punto(puntos[0].X, puntos[0].Y, puntos[0].Z));
                j++;
            }

            for (int i = 1 ; i < puntos.Count; i++)
            {
               
                if (puntosCirculoNuevo.Count != 0)
                {
                    puntosCirculoAnterior = puntosCirculoNuevo;
                }

                puntosCirculoNuevo = Circulo.CalcularPuntos(new Punto(puntos[i - 1].X,
                puntos[i - 1].Y,
                puntos[i - 1].Z),
                new Punto(puntos[i].X, puntos[i].Y, puntos[i].Z));

                if (puntosCirculoNuevo.Count == 0)
                    continue;

                Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
                //Gl.glBegin(Gl.GL_LINE_STRIP);

                for (int p = 0; p < puntosCirculoNuevo[1].Count; p++)
                {
                    Gl.glNormal3d(puntosCirculoAnterior[0][p].X,
                        puntosCirculoAnterior[0][p].Y,
                        puntosCirculoAnterior[0][p].Z);
                    Gl.glVertex3d(puntosCirculoAnterior[1][p].X,
                        puntosCirculoAnterior[1][p].Y,
                        puntosCirculoAnterior[1][p].Z);

                    Gl.glNormal3d(puntosCirculoNuevo[0][p].X,
                        puntosCirculoNuevo[0][p].Y,
                        puntosCirculoNuevo[0][p].Z);
                    Gl.glVertex3d(puntosCirculoNuevo[1][p].X,
                        puntosCirculoNuevo[1][p].Y,
                        puntosCirculoNuevo[1][p].Z);
                }


                Gl.glNormal3d(puntosCirculoAnterior[0][0].X,
                        puntosCirculoAnterior[0][0].Y,
                        puntosCirculoAnterior[0][0].Z);
                Gl.glVertex3d(puntosCirculoAnterior[1][0].X,
                    puntosCirculoAnterior[1][0].Y,
                    puntosCirculoAnterior[1][0].Z);

                Gl.glNormal3d(puntosCirculoNuevo[0][0].X,
                    puntosCirculoNuevo[0][0].Y,
                    puntosCirculoNuevo[0][0].Z);
                Gl.glVertex3d(puntosCirculoNuevo[1][0].X,
                    puntosCirculoNuevo[1][0].Y,
                    puntosCirculoNuevo[1][0].Z);

                Gl.glEnd();
            }
        }
    }
}
